/**
 * WlDrManager.java
 * <p>
 * Copyright 2012 Petro-CyberWorks Information & Technology Co., Ltd.	All right reserved.
 */
package com.liangtian.mdm.material.service;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.github.pagehelper.PageInfo;
import com.liangtian.mdm.activiti.api.entity.ShForm;
import com.liangtian.mdm.material.common.model.ReturnMess;
import com.liangtian.mdm.material.model.WlDr;
import com.liangtian.mdm.material.model.WlDrTzl;
import com.liangtian.mdm.material.model.WlwlField;
import com.liangtian.mdm.material.model.WlwlLan;
import com.liangtian.mdm.system.user.model.SysUser;

/**
 * 导入物料数据业务操作接口
 *
 * @author jyh
 * @date 2016-09-29
 */
public interface WlDrService {

    /**
     * 根据id找导入物料数据
     *
     * @param id
     *            数据ID
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public WlDr getWlDrByWym(String wym);

    /**
     * 查找导入表物料特征量数据
     *
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public List<WlDrTzl> getWlDrTzl(Map<String, Object> cond);

    /**
     * 插入数据
     *
     * @param wlDr
     * @author jyh
     * @date 2016-09-29
     */
    public void insertWlDr(WlDr wlDr);

    /**
     * 更新导入物料的指定字段
     *
     * @param map
     *            key:需要更新的字段，value:更新后的值
     * @return 更新成功的条数
     * @author jyh
     * @date 2016-09-29
     */
    public int updateWlDr(Map<String, Object> cond);

    /**
     * 物料编辑保存，同时更新特征量数据
     *
     * @param map
     *            key:物料需要更新的字段，value:更新后的值
     * @param wlDrTzlStr
     *            包含特征量信息的字符串
     * @param wlDrLanStr
     *            包含物料多语言信息的字符串
     * @param attachIds
     *            附件的id
     * @author jyh
     * @date 2016-09-29
     */
    public void updateWlDr(Map<String, Object> cond, String wlDrTzlStr, String wlDrLanStr, HttpServletRequest request);

    /**
     * 删除导入物料数据
     *
     * @param ids
     * @author jyh
     * @date 2016-09-29
     */
    public void deleteWlDrByIdS(List<String> ids);

    /**
     * 逻辑删除导入物料数据
     *
     * @param cond
     *            过滤数据的查询条件
     * @return 被逻辑删除的数据个数
     * @author jyh
     * @date 2016-09-29
     */
    public int logicDeleteWlDrByIdS(Map<String, Object> cond);

    /**
     * 保存导入物料数据，包括保存特征量
     *
     * @param wlDr
     *            物料对象
     * @param wlDrTzlStr
     *            包含特征量信息的字符串
     * @param wlDrLanStr
     *            包含物料多语言信息的字符串
     * @param attachIds
     *            附件的id
     * @author jyh
     * @date 2016-09-29
     */
    public void saveWlDr(WlDr wlDr, String wlDrTzlStr, String wlDrLanStr, HttpServletRequest request);

    /**
     * 保存导入物料数据，包括保存特征量
     *
     * @param wlDr
     *            物料对象
     * @param tzls
     *            物料的特征量数据
     * @author jyh
     * @date 2016-09-29
     */
    // public void saveWlDr(WlDr wlDr, List<WlDrTzl> tzls);

    /**
     * 根据综合条件查询导入表物料
     *
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    @SuppressWarnings("rawtypes")
    public PageInfo queryWlDr(Map<String, Object> cond);

    /**
     * 根据综合条件查询导入表物料
     *
     * @param cond
     * @return
     * @author jyh
     * @date 2017-07-25
     */
    public List<WlDr> queryWlDrByCond(Map<String, Object> cond);

    /**
     * 根据综合条件查询用户待审核的物料
     *
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    @SuppressWarnings("rawtypes")
    public PageInfo queryWlDrApprove(Map<String, Object> cond);

    /**
     * 根据综合条件查询出的导入表物料总记录数
     *
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public int queryWlDrCount(Map<String, Object> cond);

    /**
     * 根据综合条件查询出用户待审核的导入表物料总记录数
     *
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public int queryWlDrApproveCount(Map<String, Object> cond);

    /**
     * 校验指定用户导入的指定小类下的物料
     *
     * @param lbbm
     * @param creator_account
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public String checkoutWlDr(Map<String, Object> cond);

    /**
     * 批量提交无错误状态的导入表物料，采取该方法会遇到不能排除同时提交了相同长描述的问题
     *
     * @param wlDrs
     *            导入表物料
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public ReturnMess submitWlDr(List<WlDr> wlDrs);

    /**
     * 提交单条无错误状态的导入表物料，走的是共两级审批流程
     *
     * @param wlDr
     * @return 1：成功发起流程；2：发起流程失败；3：未找到配置流程
     * @author jyh
     * @date 2016-09-29
     */
    public int submitWlDr(WlDr wlDr);

    /**
     * 查询用户待审批的物料数据
     *
     * @param cond
     *            查询条件
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    @SuppressWarnings("rawtypes")
    public PageInfo queryApproveData(Map<String, Object> cond);

    /**
     * 审核物料
     *
     * @param approveInfo
     *            物料审核的拼接信息
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public ReturnMess approveWlDr(String approveInfo);

    /**
     * 产生正式物料
     *
     * @param map
     *            存储过程需要的参数
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public String createWl(Map<String, String> cond);

    /**
     * 自动生成物料代码
     *
     * @param wlDr
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public String autoCreateWl(WlDr wlDr);

    /**
     * 快速找出用户所输入长描述的相匹配值
     *
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public List<WlwlLan> getQcSimilar(Map<String, Object> cond);

    /**
     * 找出能审核具体导入表物料的审核员
     *
     * @param wlDrId
     *            导入表物料的id
     * @param unitPermission
     *            是否需要根据单位权限过滤
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public List<SysUser> getApproverLstByWlDrId(String wlDrId, String unitPermission);

    /**
     * 使用指定模板批量导入物料数据
     *
     * @param inputStream
     * @param wlLbmbId
     * @return
     * @author jyh
     * @date 2016-09-29
     */
    public Map<String, Object> importWlFromExcel(InputStream inputStream, String wlLbmbId);

    /**
     * 导出导入表物料数据
     *
     * @param cond
     * @author jyh
     * @date 2016-09-29
     */
    public void wlDrExport(Map<String, Object> cond, HttpServletResponse response);

    /**
     * 审核页面导出导入表物料数据
     *
     * @param cond
     * @param response
     * @author jyh
     * @date 2016-09-29
     */
    public void wlDrApproveExport(Map<String, Object> cond, HttpServletResponse response);

    /**
     * 导出导入表物料明细数据
     *
     * @param cond
     *            查询条件
     * @param type
     *            2：审核页面中导出 ；
     * @param response
     * @author jyh
     * @date 2016-09-29
     */
    public void wlDrMxExport(Map<String, Object> cond, HttpServletResponse response, String type);

    /**
     * 审核员编辑物料时，保存前进行校验
     *
     * @param wym
     *            当前导入表物料的唯一码
     * @param qc_no_ljfh
     *            没有连接符号的长描述
     * @return 错误信息
     * @author jyh
     * @date 2016-09-29
     */
    public String checkWhenShrEdit(String wym, String qc_no_ljfh);

    /**
     * 物料审核
     *
     * @param forms
     *            待审数据
     * @return
     * @author jyh
     * @date 2017-02-17
     */
    public Map<String, Object> wlDrApprove(List<ShForm> forms);

    /**
     * 移动端物料审核
     *
     * @param forms
     *            待审数据
     * @return
     * @author jyh
     * @date 2017-06-20
     */
    public Map<String, Object> wlDrApproveMobile(List<ShForm> forms, String userId);

    /**
     * 提交的物料数据范围内校验重复
     *
     * @author xiuzhangl
     * @date 2017年8月29日 下午3:56:21
     * @param wyms_x
     * @return
     */

    public List<WlDr> checkByCur(String wyms_x);

    /**
     * 数据审核通过
     *
     * @param T_data
     */
    public void shenHetg(List<ShForm> T_data);

    /**
     * 数据审核拒绝
     *
     * @param F_data
     */
    public void shenHejj(List<ShForm> F_data);

    /**
     * 类别计量单位删除时判断物料表中是否有此计量单位的数据
     * @param cond
     * @return
     
     * @date 2017-11-06
     */
    public int getCountByDelLbJldw(Map<String, Object> map);

    /**
     * 类别修改删除时判断物料表中是否有此类别的数据
     * @param cond
     * @return
     
     * @date 2017-11-07
     */
    public int getCountByLbUpdAndDel(Map<String, Object> map);

    /**
     * 根据id找审核页提交和变更的物料数据
     *
     * @param id
     *            数据ID
     * @return
     * @author ly
     * @date 2017-11-14
     */
    public WlDr getApproveByWym(String wym);

    //物料代码申请历史导出
    public void exportWlDr(List<WlDr> list, List<WlwlField> field, HttpServletResponse response);

    @SuppressWarnings("rawtypes")
    public PageInfo queryWlDr2(Map<String, Object> cond);

    /**
     * 删除wym前，校验是否有不符合删除的数据
     * @param wyms
     * @return
     */
    public int checkCanDelete(String wyms);

}
